ดึงข้อมูลข้าม Spreadsheet ด้วย =IMPORTRANGE() ใน Google Sheets
Table of Contents
หาก Google Sheets ของคุณมีข้อมูลแยกกันอยู่หลายไฟล์ เราสามารถเรียกข้อมูลจาก Spreadsheet ไฟล์นึงไปยังอีกไฟล์นึงได้ด้วย =IMPORTRANGE()
=IMPORTRANGE() #
คือคำสั่งเดียวที่จะทำให้คุณสามารถเรียกเอาไฟล์จาก Google Sheets ของใครก็ได้(ถ้าเขาอนุญาต) มาใช้งานบน Spreadsheet ของคุณ โดยหน้าตาของคำสั่งเต็มๆก็จะเป็นอย่างนี้ครับ
=IMPORTRANGE("SPREADSHEET URL", "Range ของข้อมูลที่อยากได้ เช่น Sheet1!A1:C10")
จบแล้วครับ
ตัวอย่าง(กลัวไม่เห็นภาพ) #
สมมติว่าผมมี Spreadsheet ชื่อ “ลูกค้า” เอาไว้เก็บลูกค้าแยกแบบนี้นะครับ

แล้วผมก็มีอีก Spreadsheet นึงชื่อ “รายการขาย” เป็นคนละไฟล์กัน แต่ผมอยากเอารายชื่อลูกค้ามาแปะไว้ที่นี่ด้วย แต่ผมไม่อยาก copy & paste รายชื่อลูกค้าใหม่ทุกครั้งที่มีการแก้ไข ผมจึงเลือกใช้ =IMPORTRANGE()
เพื่อความสะดวก ใช้แค่คำสั่งเดียวจะแก้กี่ครั้งข้อมูลก็ update ตามเอง ว่าแล้วผมก็พิมพ์สูตร
=IMPORTRANGE(
"https://docs.google.com/spreadsheets/d/1A0J9ofsjn2ThsAENGH4HgR_CB_xTBkSradYhlUOTEp4",
"Sheet1!A1:B"
)
- URL ที่ผมใส่ลงไปนั้นก็คือ URL ของ Spreadsheet ที่ชื่อว่า “ลูกค้า” นั่นเองครับ
- ส่วน
Sheet1!A1:B
ก็คือ range ที่ผมต้องการเอามาแสดงครับSheet1
เอา columnA
ถึงB
มาทุก row เลย

Google Sheets จะมีหน้าต่างเล็กๆมาบอกเราว่าต้องอนุญาตการเข้าถึงก่อนนะ ก็ไม่มีอะไรครับถ้าเราสร้างเองทั้งหมดอยู่แล้วก็ Allow access ไปเลย ถ้าเป็นของคนอื่นก็ต้องรอเจ้าของเขาอนุญาตก่อน พอเรียบร้อยแล้วก็จะได้ข้อมูลมาปรากฏตรงหน้าแบบนี้เลยครับ ง่ายๆแค่นี้แหละ (ที่เห็นมาแค่ 2 column ไม่ได้ผิดนะครับ อย่าลืมนะว่าผมขอมาแค่ A
กับ B
)

ไหนลองกลับมาสร้าง Named range ที่ spreadsheet “ลูกค้า” ดูบ้างซิ ไม่อยากพิมพ์ Sheet1!A1:D
มันยาว ก็ไปที่เมนู Data > Named ranges

ตั้งชื่อเป็น Customer
แทนแล้วกันนะครับ

กลับมาที่ spreadsheet “รายการขาย” บ้าง คราวนี้ผมจะเปลี่ยน range ท้ายสูตรจาก Sheet1!A1:B
เป็น Customer
แทนบ้าง ผลที่ออกมาก็ตรงตามคาดครับ มาครบตั้งแต่ column A
ถึง D
เลย แปลว่าเราสามารถใช้ Named range กับสูตรนี้ได้ด้วยนะ

แล้วถ้าเกิดเอามาใช้กับ =QUERY()
จะเป็นยังไง ผมก็สร้าง sheet ใหม่แล้วพิมพ์สูตรลงไปเลย
=QUERY(
IMPORTRANGE("https://docs.google.com/spreadsheets/d/1A0J9ofsjn2ThsAENGH4HgR_CB_xTBkSradYhlUOTEp4","Customer"),
"where Col1 = 'C0001'"
)
สังเกตนะครับว่า เงื่อนไขใน =QUERY()
ของผมวันนี้ดูแปลกไป ไม่เหมือนเมื่อก่อนเวลาเราเรียก column เราจะใช้ตัวอักษร A, B, C, ...
ใช่ไหมครับ แต่เมื่อไหร่ก็ตามที่เราเรียกข้อมูลมาตาม =IMPORTRANGE()
เราต้องเปลี่ยนเป็น Col1, Col2, Col3, ...
แทนนะครับ ในคำสั่งนี้ผมบอกว่า “จงดึงเอาข้อมูลทุก column มาถ้า Col1
มีค่าเท่ากับ C0001
” ถ้าย้อนกลับไปดู A
หรือ Col1
นั่นก็คือ “หมายเลข” ของรายชื่อลูกค้านั่นเองครับ

ถึงผลลัพธ์จะสวยงามแต่สูตรมันช่างยืดยาวน่าเกลียดน่ากลัวเหลือเกิน เพราะ URL กินที่ไปหมด เพื่อความสวยงามเราสามารถสร้าง sheet ใหม่ขึ้นมาเก็บ URL ของแต่ละ spreadsheet ที่เราจะดึงข้อมูลมาก็ได้นะครับ

เพื่อให้สั้นลงไปอีกผมก็สร้าง Named range ของ URL ด้วยเลย ในภาพจะเห็นว่าผมสร้าง CustomerUrl
กับ PartnerUrl

ลองกลับมาแก้สูตรที่ยาวน่าเกลียดน่ากลัวให้สั้นลงด้วย Named range ดูสิครับ ดูสะอาดตาคือเยอะเลย
ของเก่า
=QUERY(
IMPORTRANGE("https://docs.google.com/spreadsheets/d/1A0J9ofsjn2ThsAENGH4HgR_CB_xTBkSradYhlUOTEp4","Customer"),
"where Col1 = 'C001'"
)
แก้ใหม่ให้สั้นลง
=QUERY(
IMPORTRANGE(CustomerUrl,"Customer"),
"where Col1 = 'C001'"
)

นอกจาก =QUERY()
แล้วเรายังสามารถใช้ได้กับทุกสูตรที่ต้องการรับ range นะครับ เช่น =VLOOKUP()
, =HLOOKUP()
, =FILTER()
, =MATCH()
และอีกหลายๆตัวเลย ต่อไปนี้เราไม่จำเป็นต้องรวมทุกอย่างใน Spreadsheet เดียวให้รู้สึกเทอะทะแล้วนะครับ การแยกข้อมูลเป็นหลายๆส่วนอาจจะช่วยให้การจัดการง่ายขึ้นได้นะครับ ลองนึกภาพ Spreadsheet ที่มีอยู่ 50-60 sheets คงต้องเลื่อนหากันตาลายแน่นอนครับ